package com.catazy.base.domain.result


/**
 * Result 是 Success 类型时执行传入的 lambda 表达式，并返回其结果；如果不是 Success 类型，则直接返回当前的 Result 实例
 *
 * 内联函数 (inline):
 *          内联函数可以减少函数调用的开销，提高性能。
 *          使用 crossinline 关键字可以防止 lambda 表达式在另一个线程上被调用，从而避免潜在的并发问题
 */
inline fun <T> Result<T>.mapSuccess(
    crossinline onResult: Result.Success<T>.() -> Result<T>
): Result<T> {
    if (this is Result.Success) {
        return onResult(this)
    }
    return this
}